<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // // 范围的和
        // function range(start, end, step = start < end ? 1 : -1) {
        //     let array = [];
        //     if (step > 0) {
        //         for (let i = start; i <= end; i += step) array.push(i);
        //     } else {
        //         for (let i = start; i >= end; i += step) array.push(i);
        //     }
        //     return array;
        // }
        // function sum(array) {
        //     let total = 0;
        //     for (let value of array) {
        //         total += value;
        //     }
        //     return total;
        // }
        // console.log(range(1, 10))
        // console.log(range(5, 2, -1));
        // console.log(sum(range(1, 10)));

        // // 逆转数组
        // function reverseArray(array) {
        //     let output = [];
        //     for (let i = array.length - 1; i >= 0; i--) {
        //         output.push(array[i]);
        //     }
        //     return output;
        // }
        // function reverseArrayInPlace(array) {
        //     for (let i = 0; i < Math.floor(array.length / 2); i++) {
        //         let old = array[i];
        //         array[i] = array[array.length - 1 - i];
        //         array[array.length - 1 - i] = old;
        //     }
        //     return array;
        // }
        // console.log(reverseArray(["A", "B", "C"]));
        // let arrayValue = [1, 2, 3, 4, 5];
        // reverseArrayInPlace(arrayValue);
        // console.log(arrayValue);



        // // 实现列表
        // function arrayToList(array) {
        //     let list = null;
        //     for (let i = array.length - 1; i >= 0; i--) {
        //         list = { value: array[i], rest: list };
        //     }
        //     return list;
        // }
        // function listToArray(list) {
        //     let array = [];
        //     for (let node = list; node; node = node.rest) {
        //         array.push(node.value);
        //     }
        //     return array;
        // }
        // function prepend(value, list) {
        //     return { value, rest: list };
        // }
        // function nth(list, n) {
        //     if (!list) {
        //         return undefined
        //     } else if (n == 0) {
        //         return list.value
        //     } else {
        //         return nth(list.rest, n - 1)
        //     }
        // }
        // console.log(arrayToList([10, 20]));
        // console.log(listToArray(arrayToList([10, 20, 30])));
        // console.log(prepend(10, prepend(20, null)));
        // console.log(nth(arrayToList([10, 20, 30]), 1));



        // // 深层比较
        // function deepEqual(a, b) {
        //     if (a === b) return true;

        //     if (a == null || typeof a != "object" ||
        //         b == null || typeof b != "object") {
        //         return false
        //     }
        //     let keysA = Object.keys(a), keysB = Object.keys(b);

        //     if (keysA.length != keysB.length) {
        //         return false
        //     }
        //     for (let key of keysA) {
        //         if (!keysB.includes(key) || !deepEqual(a[key], b[key])) {
        //             return false
        //         };
        //     }
        //     return true;
        // }
        // let obj = { here: { is: "an" }, object: 2 };
        // console.log(deepEqual(obj, obj));
        // console.log(deepEqual(obj, { here: 1, object: 2 }));
        // console.log(deepEqual(obj, { here: { is: "an" }, object: 2 }));
    </script>
</body>

</html>